package zqkcom.atguigu.bean;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

//是一个购物车的业务类  必须初始化
//因为里面属性有些是不需要外部来赋值的所以是无构造器

//存储购物项的map集合，以图书id为键
public class Cart implements Serializable {
    //购物项 必须初始化
    private Map<String, CartItem> map = new LinkedHashMap<>();//有序的
    //总数量
    private Integer totalCount;
    //总金额
    private Double totalAmount;

    public Map<String, CartItem> getMap() {
        return map;
    }

    public void setMap(Map<String, CartItem> map) {
        this.map = map;
    }

    public Integer getTotalCount() {//总数量
        totalCount = 0;
        for (CartItem cartItem : getCartItemList()) {
            totalCount += cartItem.getCount();

        }
        return totalCount;
    }

    public void setTotalCount(Integer totalCount) {
        this.totalCount = totalCount;
    }

    public Double getTotalAmount() {
        BigDecimal bigDecimal1 = new BigDecimal("0.0");
//        totalAmount = 0.0; 没没用
        for (CartItem cartItem : getCartItemList()) {
            BigDecimal bigDecimal2 = new BigDecimal(cartItem.getAmount()+"");
            bigDecimal1 = bigDecimal1.add(bigDecimal2);
        }
        return bigDecimal1.doubleValue();
    }

    public void setTotalAmount(Double totalAmount) {
        this.totalAmount = totalAmount;
    }
    //以list获取map中所有购物项的方法 -->可以通过.属性赋值
    //map不好获取值，转换为
    public List<CartItem> getCartItemList() {
        return new ArrayList<>(map.values());
    }


    /**
     * 向购物车添加购购物项
     */
    public void addBook2Cart(Book book) {
        //通过bookId获取图书信息
        CartItem cartItem = map.get(book.getId() + "");
        if (cartItem == null) {
            //购物车没有此图书信息，通过booK对象创建购物项，并加到map中
             cartItem = new CartItem();
             cartItem.setBook(book);
             cartItem.setCount(1);
            map.put(book.getId() + "", cartItem);
        } else {
            //购物车有此图书信息,更新图书所对应购物项数量
            cartItem.setCount(cartItem.getCount()+1);//直接操作数量
        }

        //获取session中的购物车对象



}

    /**
     * 删除购物车添加购购物项
     */
    public void deleteCartItem(String bookId) {
        map.remove(bookId);
    }

    /**
     * 清空购物车添加购购物项
     */
    public void clearCart() {
        map.clear();
    }

    /**
     * 更新购物车的图书数量
     */
    public void updateCount(String bookId,String countStr) {
        CartItem cartItem = map.get(bookId);
        try {
            Integer count = Integer.parseInt(countStr);
            if (count>0 && count<= cartItem.getBook().getStock()) {
                cartItem.setCount(count);//更新数量
            }
            if (count == 0) {
                map.remove(bookId);
            }
        } catch (NumberFormatException e) { }
    }

}
